জাভাস্ক্রিপ্টে কলব্যাক (Callback) হল একটি ফাংশন যা অন্য একটি ফাংশনের আর্গুমেন্ট হিসেবে পাস করা হয় এবং নির্দিষ্ট অপারেশন সম্পন্ন হওয়ার পর এক্সিকিউট হয়। এটি অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের একটি মূল ভিত্তি, যা কোডকে আরও নমনীয় এবং কার্যকর করে তোলে।
কলব্যাক ফাংশনগুলি মূলত নির্দিষ্ট কাজ সম্পন্ন করার পরে অন্য ফাংশনকে নোটিফাই করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, ডেটা লোড করার পরে UI আপডেট করা বা কোনো ইভেন্ট ঘটলে নির্দিষ্ট কার্য সম্পন্ন করা।
function fetchData(callback) {
setTimeout(() => {
const data = { name: "আলিস", বয়স: ২৫ };
callback(data);
}, ২০০০);
}
function displayData(data) {
console.log("ডেটা:", data);
}
fetchData(displayData); // আউটপুট: ডেটা: { name: 'আলিস', বয়স: ২৫ }
এখানে, fetchData
ফাংশনটি ২ সেকেন্ড পর displayData
কলব্যাক ফাংশনটি এক্সিকিউট করে।
সিঙ্ক্রোনাস কলব্যাকগুলি সেই ফাংশনগুলি যা কল করা হয় এবং তাৎক্ষণিকভাবে এক্সিকিউট হয়।
function greet(callback) {
console.log("হ্যালো!");
callback();
}
function sayGoodbye() {
console.log("বিদায়!");
}
greet(sayGoodbye);
// আউটপুট:
// হ্যালো!
// বিদায়!
অ্যাসিঙ্ক্রোনাস কলব্যাকগুলি সেই ফাংশনগুলি যা ভবিষ্যতে এক্সিকিউট হয়, যেমন নেটওয়ার্ক রিকোয়েস্ট বা টাইমার অপারেশন সম্পন্ন হওয়ার পরে।
function fetchData(callback) {
setTimeout(() => {
const data = { name: "বব", বয়স: ৩০ };
callback(data);
}, ৩০০০);
}
function displayData(data) {
console.log("ডেটা:", data);
}
fetchData(displayData); // আউটপুট: ডেটা: { name: 'বব', বয়স: ৩০ }
কলব্যাকগুলি অ্যাসিঙ্ক্রোনাস অপারেশনগুলিকে সঠিকভাবে হ্যান্ডল করতে সহায়তা করে, যেমন ডেটা ফেচ করা বা ইভেন্ট হ্যান্ডল করা।
কলব্যাক ফাংশনগুলি কোডকে আরও মডুলার এবং পুনঃব্যবহারযোগ্য করে তোলে, যা বড় প্রকল্পগুলিতে কোড ম্যানেজমেন্ট সহজ করে।
কলব্যাকগুলি ইভেন্ট ড্রিভেন প্রোগ্রামিংকে সমর্থন করে, যেখানে ইভেন্টের ভিত্তিতে ফাংশনগুলি এক্সিকিউট হয়।
কলব্যাক হেল হল একটি সমস্যা যেখানে বহু স্তরের কলব্যাক ফাংশনগুলি নেস্টেড থাকে, যা কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা কমিয়ে দেয়। এটি প্রধানত অ্যাসিঙ্ক্রোনাস অপারেশনগুলিকে একের পর এক পরিচালনা করার সময় ঘটে।
fetchData(function(data) {
processData(data, function(result) {
saveData(result, function(status) {
console.log("ডেটা সংরক্ষিত হয়েছে:", status);
});
});
});
এই রকম নেস্টেড কলব্যাকগুলি কোডকে জটিল এবং অস্পষ্ট করে তোলে, যা ডিবাগিং এবং রক্ষণাবেক্ষণকে কঠিন করে তোলে।
কলব্যাক হেল এড়াতে বিভিন্ন পদ্ধতি ব্যবহার করা যেতে পারে, যেমন:
প্রমিসেস কলব্যাকগুলির তুলনায় আরও সুশৃঙ্খল এবং পাঠযোগ্য কোড লেখার সুযোগ দেয়।
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const success = true;
if (success) {
resolve({ name: "চার্লি", বয়স: ৩৫ });
} else {
reject("ডেটা লোড করতে ব্যর্থ হয়েছে।");
}
}, ২০০০);
});
}
fetchData()
.then(data => {
console.log("ডেটা:", data);
})
.catch(error => {
console.error("ত্রুটি:", error);
});
async
এবং await
কিওয়ার্ডগুলি প্রমিসেসের উপর ভিত্তি করে কাজ করে এবং অ্যাসিঙ্ক্রোনাস কোডকে সিঙ্ক্রোনাস কোডের মত লেখার সুবিধা দেয়।
async function getData() {
try {
const data = await fetchData();
console.log("ডেটা:", data);
} catch (error) {
console.error("ত্রুটি:", error);
}
}
getData(); // আউটপুট: ডেটা: { name: 'চার্লি', বয়স: ৩৫ }
কলব্যাক ফাংশনে ত্রুটি পরিচালনা করা কিছুটা জটিল হতে পারে, বিশেষ করে যখন কলব্যাকগুলি নেস্টেড থাকে।
বহু স্তরের নেস্টেড কলব্যাকগুলি কোডকে জটিল এবং অস্পষ্ট করে তোলে, যা কোডের পাঠযোগ্যতা কমিয়ে দেয়।
জাভাস্ক্রিপ্টে কলব্যাক ফাংশনগুলি অ্যাসিঙ্ক্রোনাস অপারেশনগুলি হ্যান্ডল করতে এবং কোডকে আরও নমনীয় ও পুনঃব্যবহারযোগ্য করতে অপরিহার্য। যদিও কলব্যাকগুলি অনেক সুবিধা প্রদান করে, তবুও নেস্টেড কলব্যাকগুলি কোডকে জটিল এবং অস্পষ্ট করে তোলে, যা কলব্যাক হেল নামে পরিচিত। প্রমিসেস এবং অ্যাসিঙ্ক/অওয়েইট এর মতো আধুনিক ফিচারগুলি কলব্যাক হেল এড়াতে এবং আরও সুশৃঙ্খল ও পাঠযোগ্য অ্যাসিঙ্ক্রোনাস কোড লেখার সুযোগ দেয়। কলব্যাকগুলি জাভাস্ক্রিপ্টের অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের একটি মূল ভিত্তি হলেও, সেগুলির সঠিক ব্যবহারের মাধ্যমে কোডের কার্যকারিতা এবং স্থায়িত্ব নিশ্চিত করা যায়।
common.read_more